/**
 * 研发项目列表页面
 * 优化版 - 适配小驼峰命名和新数据结构
 */
// 直接使用项目内部store，避免路径问题
const { projectStore } = require('../../../config/path_resolver.js').getRootConfigPath('path_resolver.js').getProjectStorePath('project_store.js');
const pageHelper = require('../../../config/path_resolver.js').getRootConfigPath('path_resolver.js').getRootConfigPath('path_import.js').pageHelper;
const timeHelper = require('../../../config/path_resolver.js').getRootConfigPath('path_resolver.js').getRootConfigPath('path_import.js').timeHelper;
const { logEvent } = require('../../../../helpers/log_helper.js');
const { getNetworkStatus, listenNetworkStatus } = require('../../../../helpers/network_helper.js');

Page({
  data: {
    isLoading: true,
    isEmpty: false,
    
    // 项目列表数据
    dataList: [],
    
    // 分页相关
    total: 0,
    currentPage: 1,
    pageSize: 10,
    hasMore: true,
    
    // 筛选条件
    filter: {
      status: '',
      category: '',
      priority: '',
      search: ''
    },
    
    // 选项定义
    statusOptions: [
      { id: '', label: '全部状态' },
      { id: '1', label: '项目审核' },
      { id: '2', label: '休眠' },
      { id: '3', label: '活动' },
      { id: '99', label: '已完成' }
    ],
    
    categoryOptions: [
      { id: '', label: '全部类别' },
      { id: '研发', label: '研发' },
      { id: '定制', label: '定制' },
      { id: '量产', label: '量产' },
      { id: '平台', label: '平台' }
    ],
    
    priorityOptions: [
      { id: '', label: '全部优先级' },
      { id: 'urgent', label: '紧急' },
      { id: 'high', label: '高' },
      { id: 'normal', label: '中' },
      { id: 'low', label: '低' }
    ],
    
    // 排序选项
    sortOptions: [
      { id: 'recent', label: '最近更新' },
      { id: 'priority', label: '优先级' },
      { id: 'deadline', label: '截止日期' }
    ],
    currentSort: 'recent',
    
    // 样式相关
    refreshTrigger: false
  },
  
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: async function(options) {
    // 网络检测
    const net = await getNetworkStatus();
    if (!net.isConnected) {
      wx.showToast({ title: '当前无网络，请检查连接', icon: 'none' });
    } else if (net.networkType === '2g') {
      wx.showToast({ title: '当前为2G弱网，体验可能受影响', icon: 'none' });
    }
    listenNetworkStatus((res) => {
      if (!res.isConnected) wx.showToast({ title: '网络已断开', icon: 'none' });
      else if (res.networkType === '2g') wx.showToast({ title: '当前为2G弱网', icon: 'none' });
    });
    logEvent('page_load', { page: 'plm_research_list' });
    this._loadList(true);
  },
  
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {
    // 清除store绑定
    projectStore.setProjectList([]);
  },
  
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {
    this._loadList(true);
    wx.stopPullDownRefresh();
  },
  
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {
    if (this.data.hasMore) {
      this._loadMore();
    }
  },
  
  /**
   * 加载项目列表
   * @param {boolean} refresh 是否刷新（重置分页）
   */
  _loadList: async function(refresh = false) {
    try {
      if (refresh) {
        this.setData({ 
          isLoading: true,
          currentPage: 1,
          refreshTrigger: !this.data.refreshTrigger
        });
      }
      
      // 准备查询参数
      const params = {
        page: this.data.currentPage,
        size: this.data.pageSize,
        status: this.data.filter.status,
        projectCategory: this.data.filter.category,
        priority: this.data.filter.priority,
        search: this.data.filter.search,
        sortType: this.data.currentSort
      };
      
      // 加载数据
      const result = await projectStore.loadProjectList(params);
      
      if (!result) {
        return;
      }
      
      // 格式化数据用于显示
      const formattedList = this._processListData(result.list || []);
      
      // 更新页面数据
      if (refresh) {
        this.setData({
          dataList: formattedList,
          total: result.total,
          isEmpty: formattedList.length === 0,
          hasMore: formattedList.length < result.total
        });
      } else {
        // 追加数据
        const newList = this.data.dataList.concat(formattedList);
        this.setData({
          dataList: newList,
          hasMore: newList.length < result.total
        });
      }
    } catch (err) {
      console.error('加载项目列表失败', err);
      pageHelper.showModal('加载失败: ' + (err.message || '未知错误'));
    } finally {
      this.setData({ isLoading: false });
    }
  },
  
  /**
   * 加载更多数据
   */
  _loadMore: function() {
    if (this.data.isLoading) return;
    
    const nextPage = this.data.currentPage + 1;
    this.setData({ currentPage: nextPage });
    
    this._loadList(false);
  },
  
  /**
   * 处理列表数据，添加状态样式等
   * @param {Array} list 原始列表数据
   * @returns {Array} 格式化后的列表数据
   */
  _processListData: function(list) {
    if (!Array.isArray(list)) return [];
    
    const ResearchProjectModel = require('../../../model/research_project_model');
    const statusHelper = require('../../../helpers/status_helper');
    
    return list.map(item => {
      // 确保model字段存在
      if (!item.model) {
        item.model = '未命名项目';
      }
      
      // 设置fullStatusDesc而不是statusDesc
      if (!item.fullStatusDesc) {
        // 尝试使用状态帮助工具计算状态描述
        try {
          item.fullStatusDesc = ResearchProjectModel.getStatusDesc(
            item.level1, item.level2, item.level3, item.level4
          );
        } catch (error) {
          console.error('计算状态描述出错:', error);
          item.fullStatusDesc = '未知状态';
        }
      }
      
      // 计算开发状态
      item.developmentStatus = statusHelper.getDevelopmentStatus(item);
      
      // 处理优先级
      item.priorityName = this._getPriorityName(item.priority);
      item.priorityClass = this._getPriorityClass(item.priority);
      
      // 处理日期格式
      item.createTimeFormat = timeHelper.formatDateTime(item.createTime, 'YYYY-MM-DD');
      item.deadlineFormat = timeHelper.formatDateTime(item.deadline, 'YYYY-MM-DD');
      
      // 设置状态样式
      let statusClass = this._getStatusClass(item.level1);
      
      return {
        ...item,
        statusClass
      };
    });
  },
  
  /**
   * 获取状态样式类
   * @param {number} status 状态值
   * @returns {string} 样式类名
   */
  _getStatusClass: function(status) {
    const statusClasses = {
      1: 'status-review',
      2: 'status-dormant',
      3: 'status-active',
      99: 'status-completed'
    };
    return statusClasses[status] || 'status-unknown';
  },
  
  /**
   * 获取优先级名称
   */
  _getPriorityName: function(priority) {
    const priorityMap = {
      'low': '低',
      'normal': '中',
      'high': '高',
      'urgent': '紧急'
    };
    return priorityMap[priority] || '中';
  },
  
  /**
   * 获取优先级样式类
   */
  _getPriorityClass: function(priority) {
    const priorityClasses = {
      'low': 'priority-low',
      'normal': 'priority-normal',
      'high': 'priority-high',
      'urgent': 'priority-urgent'
    };
    return priorityClasses[priority] || 'priority-normal';
  },
  
  /**
   * 筛选条件变更处理
   */
  onFilterChange: function(e) {
    const { field, value } = e.currentTarget.dataset;
    
    // 更新对应筛选字段
    this.setData({
      [`filter.${field}`]: value
    });
    
    // 重新加载数据
    this._loadList(true);
  },
  
  /**
   * 排序方式变更处理
   */
  onSortChange: function(e) {
    const { sort } = e.currentTarget.dataset;
    
    if (sort === this.data.currentSort) return;
    
    this.setData({ currentSort: sort });
    
    // 重新加载数据
    this._loadList(true);
  },
  
  /**
   * 搜索框输入处理
   */
  onSearchInput: function(e) {
    this.setData({
      'filter.search': e.detail.value
    });
  },
  
  /**
   * 搜索提交处理
   */
  onSearchSubmit: function() {
    this._loadList(true);
  },
  
  /**
   * 清除搜索处理
   */
  onSearchClear: function() {
    this.setData({
      'filter.search': ''
    });
    this._loadList(true);
  },
  
  /**
   * 点击项目条目
   */
  onProjectTap: function(e) {
    const { id } = e.currentTarget.dataset;
    
    if (!id) return;
    
    wx.navigateTo({
      url: `/projects/plm/pages/research/detail/index?id=${id}`
    });
  },
  
  /**
   * 新建项目
   */
  onCreateTap: function() {
    wx.navigateTo({
      url: '/projects/plm/pages/research/create/index'
    });
  }
}); 